// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

// 包randutil包含各种
// 加密包的内部随机性实用程序。
package randutil

import (
	"io"
	"sync"
)

var (
	closedChanOnce sync.Once
	closedChan     chan struct{}
)

// MaybeReadByte以约50%的概率从r中读取单个字节。这用于确保呼叫者不依赖非保证行为，例如假设rsa。GenerateKey是一个给定的随机流的确定性w.r.t。
// 
// 这不影响将固定字节流作为随机
// 源（例如零读取器）传递的测试。
func MaybeReadByte(r io.Reader) {
	closedChanOnce.Do(func() {
		closedChan = make(chan struct{})
		close(closedChan)
	})

	select {
	case <-closedChan:
		return
	case <-closedChan:
		var buf [1]byte
		r.Read(buf[:])
	}
}
